<!DOCTYPE html>
<html>
	<head>
		<title>Soter官方拓展包功能列表</title>
		<meta charset="UTF-8">
		<meta name="viewport" content="width=device-width, initial-scale=1.0">
		<script src="js/inc.js"></script>
	</head>
	<body>
		<fieldset>
			<legend>Soter官方拓展包功能列表</legend>
			<ol>
				<li><h2 class="title_h2">说明</h2>
					除非特殊说明外，本页面的所介绍的功能都需要安装<a href="extension.html">官方拓展包</a>才能使用。
				</li>
				<li><h2 class="title_h2">验证码</h2>
					可以通过<code>Sr::extension('Captcha')</code>实例化一个验证码类。
					<br>使用方法，比如下面的代码：
					<pre class="brush:php">
						// 1.完整示例
						$image=Sr::extension('Captcha');
						$image->config('宽度','高度','字符个数','验证码session索引');
						$code=$image->create();//这样就会向浏览器输出一张图片,并返回验证码图片上的内容
						//2.简单示例:
						$image=Sr::extension('Captcha');
						$image->create();//这样就会向浏览器输出一张图片	
					</pre>
					提示：
					<br><b>1.所有参数都可以省略</b>
					<br>默认是：宽80 高20 字符数4 验证码$_SESSION键名称captcha_code
					<br>第四个参数即把验证码存到$_SESSION['captcha_code'],第四个参数如果为null，则不会在$_SESSION中设置验证码。
					<br>当第四个参数是null的时候，可以通过<code>$image->getCheckCode()</code>获取写到图片上的验证码字符串
					<br><b>2.设置验证码组成</b>
					<br>验证码组成类型，有三种：1.number（纯数字） 2.letter（纯字母） 3.both（数字和数字）
					<br>默认是：both
					<br>可以通过$image->setCodeMode('类型')进行设置
					<br>比如下面的代码：
					<pre class="brush:php">
						$image=Sr::extension('Captcha');
						$image->setCodeMode('number')
							->config('宽度','高度','字符个数','验证码session索引')
						$code=$image->create();//这样就会向浏览器输出一张图片,并返回验证码图片上的内容
					</pre>
				</li>
                                <li>
                                        <h2 class="title_h2">HTTP操作类</h2>
                                        主要功能：
                                        <br>1.模拟登录，cookie自动管理，也可以手动结合自动管理cookie。
                                        <br>2.抓取数据，支持get，post。
                                        <br>可以通过<code>Sr::extension('Http')</code>实例化一个HTTP操作类。
                                        <br><b>1.使用GET方式请求一个页面</b>
                                        <br>通过<code>get($url, $data = null, Array $header = null, $max_redirect = 0)</code>方法，来使用GET方式请求一个页面。
                                        <br>参数说明：
                                        <br>$url 必填：页面地址
                                        <br>$data 选填：要发送的数据数组或者原始数据，比如：array('user'=>'test','pass'=>'354534'),键是表单字段名称，值是表单字段的值，默认 null
                                        <br>$header 选填：附加的HTTP头，比如：array('Connection:keep-alive','Cache-Control:max-age=0')，注意冒号前后不能有空格，默认 null
                                        <br>$max_redirect 选填：遇到301或302时跳转的最大次数 ，默认 0 不跳转
                                        <br>示例如下：
                                        <pre class="brush:php">
                                                $http = Sr::extension('Http');
                                                //1.返回页面内容
                                                $http->get('https://www.baidu.com/');

                                                //2.返回页面内容并且传递数据
                                                $args['code'] = '1';
                                                $http->get('https://baidu.com/', $args);

                                                //3.返回页面内容并且附加HTTP头
                                                $header = array('Connection:keep-alive','Cache-Control:max-age=0');
                                                $http->get('https://baidu.com/', null, $header);

                                                //4.返回页面内容,遇到301或302时跳转的最大次数，默认 0 不跳转
                                                $http->get('https://baidu.com/', null, null, 1);
                                        </pre>
                                        <b>2.使用POST方式请求一个页面</b>
                                        <br>通过<code>post($url, $data = null, Array $header = null, $max_redirect = 0)</code>方法，来使用POST方式请求一个页面。
                                        <br>参数说明：
                                        <br>$url 必填：页面地址
                                        <br>$data 选填：要发送的数据数组，比如：array('user'=>'test','pass'=>'354534'),键是表单字段名称，值是表单字段的值，默认 null
                                        <br>$header 选填：附加的HTTP头，比如：array('Connection:keep-alive','Cache-Control:max-age=0')，注意冒号前后不能有空格，默认 null
                                        <br>$max_redirect 选填：遇到301或302时跳转的最大次数 ，默认 0 不跳转
                                        <br>示例如下：
                                        <pre class="brush:php">
                                                $http = Sr::extension('Http');
                                                //1.返回页面内容
                                                $http->post('https://www.baidu.com/');

                                                //2.返回页面内容并且传递数据
                                                $args['code'] = '1';
                                                $http->post('https://baidu.com/', $args);

                                                //3.返回页面内容并且附加HTTP头
                                                $header = array('Connection:keep-alive','Cache-Control:max-age=0');
                                                $http->post('https://baidu.com/', null, $header);

                                                //4.返回页面内容,遇到301或302时跳转的最大次数，默认 0 不跳转
                                                $http->post('https://baidu.com/', null, null, 1);
                                        </pre>
                                        <b>3.设置referer</b>
                                        <br>通过<code>setReferer($referer)</code>方法，来设置当次请求使用的referer，当get或者post请求完毕后，referer会被重置为null。
                                        <br>参数说明：
                                        <br>$referer 必填：页面地址
                                        <br>示例如下：
                                        <pre class="brush:php">
                                                $http = Sr::extension('Http');
                                                $http->setReferer('http://www.liepin.com/');
                                        </pre>
                                        <b>4.获取curl出错代码</b>
                                        <br>通过<code>errorCode()</code>方法，来获取curl出错代码（大于零的数），如果没有错误，返回0。
                                        <br>示例如下：
                                        <pre class="brush:php">
                                                $http = Sr::extension('Http');
                                                $http->errorCode();
                                        </pre>
                                        <b>5.获取curl出错字符串信息</b>
                                        <br>通过<code>errorMsg()</code>方法，来获取curl出错字符串信息，如果没有错误，返回空。
                                        <br>示例如下：
                                        <pre class="brush:php">
                                                $http = Sr::extension('Http');
                                                $http->errorMsg();
                                        </pre>
                                        <b>6.获取curl出错字符串信息</b>
                                        <br>通过<code>code()</code>方法，来获取curl出错字符串信息。
                                        <br>示例如下：
                                        <pre class="brush:php">
                                                $http = Sr::extension('Http');
                                                $http->code();
                                        </pre>
                                        <b>7.是否是重定向</b>
                                        <br>通过<code>isRedirect()</code>方法，来请求完成后，响应是否是重定向。
                                        <br>示例如下：
                                        <pre class="brush:php">
                                                $http = Sr::extension('Http');
                                                $http->isRedirect();
                                        </pre>
                                        <b>8.获取重定向的地址</b>
                                        <br>通过<code>location()</code>方法，来请求完成后，响应是重定向的时候，这里会返回重定向的链接，如果不是重定向返回null。
                                        <br>示例如下：
                                        <pre class="brush:php">
                                                $http = Sr::extension('Http');
                                                $http->location();
                                        </pre>
                                        <b>9.设置UserAgent</b>
                                        <br>通过<code>setUserAgent($user_agent)</code>方法，来设置UserAgent。
                                        <br>参数说明：
                                        <br>$user_agent 必填：用户代理
                                        <br>示例如下：
                                        <pre class="brush:php">
                                                $http = Sr::extension('Http');
                                                $http->setUserAgent('Mozilla/5.0 (Linux; U; Android 2.3.7; zh-cn; c8650 Build/GWK74) AppleWebKit/533.1 (KHTML, like Gecko)Version/4.0 MQQBrowser/4.5 Mobile Safari/533.1s');
                                        </pre>
                                        <b>10.获取请求返回的HTTP头部字符串</b>
                                        <br>通过<code>header()</code>方法，来获取请求返回的HTTP头部字符串。
                                        <br>示例如下：
                                        <pre class="brush:php">
                                                $http = Sr::extension('Http');
                                                $http->header();
                                        </pre>
                                        <b>11.获取请求返回的页面内容</b>
                                        <br>通过<code>data($is_json = false)</code>方法，来获取请求返回的页面内容。
                                        <br>参数说明：
                                        <br>$is_json 选填：是否使用json_decode()解码一下,当返回数据是json的时候这个比较有用。默认false
                                        <br>示例如下：
                                        <pre class="brush:php">
                                                $http = Sr::extension('Http');
                                                $http->data(true);
                                        </pre>
                                        <b>12.获取最后一次请求的地址</b>
                                        <br>通过<code>lastUrl()</code>方法，来请求完成后，获取最后一次请求的地址，这个往往是有重定向的时候使用的。
                                        <br>示例如下：
                                        <pre class="brush:php">
                                                $http = Sr::extension('Http');
                                                $http->lastUrl();
                                        </pre>
                                        <b>13.设置curl句柄参数</b>
                                        <br>通过<code>setOpt($opt, $val)</code>方法，来设置curl句柄参数。
                                        <br>参数说明：
                                        <br>$opt 必填：curl_setopt()的第二个参数
                                        <br>$val 必填：curl_setopt()的第三个参数
                                        <br>示例如下：
                                        <pre class="brush:php">
                                                $http = Sr::extension('Http');
                                                $http->setOpt(CURLOPT_HEADER, false);
                                        </pre>
                                        <b>14.设置附加的cookie，这个不会影响自动管理的cookie</b>
                                        <br>通过<code>setCookie($key, $val = NULL)</code>方法，来设置附加的cookie，这个不会影响自动管理的cookie。
                                        <br>提醒：<br>
                                        1.每次请求完成后附加的cookie会被清空，自动管理的cookie不会受到影响。<br>
                                        2.如果cookie键名和自动管理的cookie中键名相同，那么请求的时候使用的是这里设置的值。<br>
                                        3.如果cookie键名和自动管理的cookie中键名相同，当请求完成后自动管理的cookie中键的值保持之前的不变，这里设置的值会被清除。<br>
                                        比如：<br>
                                        自动管理cookie里面有：name=snail，请求之前用setCookie设置了name=123<br>
                                        那么请求的时候发送的cookie是name=123,请求完成后恢复name=snail，如果再次请求那么发送的cookie中name=snail<br>
                                        参数说明：
                                        <br>$key 必填：cookie的key，也可以是一个键值对数组一次设置多个cookie，此时不需要第二个参数。                                        
                                        <br>$val 选填：cookie的value
                                        <br>示例如下：
                                        <pre class="brush:php">
                                                $http = Sr::extension('Http');
                                                //1.设置单个cookie
                                                $http->setCookie('username', '1122@qq.com');

                                                //2.设置多个cookie
                                                $http->setCookie(array('username' => '1122@qq.com', 'password' => '123456'));
                                        </pre>
                                </li>
				<li><h2 class="title_h2">异常记录数据库类</h2>
					异常记录数据库类可以在发生系统错误的时候，将详细的错误信息记录到数据库，方便我们安全地调试。
					<br>首先我们需要先在数据库里面创建错误日志数据表，表结构如下：
					<pre class="brush:php">
						 CREATE TABLE  `system_error_logger` (
						 `error_logger_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
						 `domain` VARCHAR( 100 ) NOT NULL COMMENT  '域名',
						 `client_ip` VARCHAR( 15 ) NOT NULL COMMENT  '访问者IP',
						 `server_ip` VARCHAR( 15 ) NOT NULL COMMENT  '服务器IP',
						 `message` TEXT NOT NULL COMMENT  '错误信息',
						 `file` VARCHAR( 1000 ) NOT NULL COMMENT  '出错文件路径',
						 `line` INT NOT NULL COMMENT  '出错行数',
						 `code` INT NOT NULL COMMENT  '出错代码',
						 `type` VARCHAR( 20 ) NOT NULL COMMENT  '错误类型',
						 `request_data` TEXT NOT NULL COMMENT  '请求的数据',
						 `create_time` INT NOT NULL COMMENT  '创建时间',
						 PRIMARY KEY (  `error_logger_id` )
						 ) ENGINE = INNODB CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT =  '系统错误日志表'
					</pre>
					然后在入口文件里面进行下面的配置：
					<pre class="brush:php">
						/* 错误日志记录，注释掉这行会关闭日志记录，去掉注释则开启日志文件记录,
						 * 第一个参数是日志文件路径，第二个参数为是否记录404类型异常 */
						//->addLoggerWriter(new Soter_Logger_FileWriter(SOTER_APP_PATH . 'storage/logs/',false))
						->addLoggerWriter(new Soter_LoggerWriter_Database())
					</pre>
					我们看到上面最后一句我们注册了一个Soter_LoggerWriter_Database日志数据库记录类。
					<br>Soter_LoggerWriter_Database的构造方法__construct($table = 'system_error_logger', $log404 = false, $dbGroup = null)
					<br>有三个可选参数，参数含义如下：
					<br>第一个参数：$table,也就是错误信息表名称，留空默认是system_error_logger
					<br>第二个参数：$log404,是否记录Soter_Exception_404错误，比如控制器不存在，方法不存在，hvmc模块不存在都会触发Soter_Exception_404错误。
					<br>第三个参数：$dbGroup,也就是使用<code>->setDatabseConfig('database')</code>配置的数据库连接信息里面的数据库配置组名称，留空是:默认组
					<b class="text_strong">
						<br>提示：
						<br>因为要把错误错误信息记录到数据库，所以注册Soter_LoggerWriter_Database之前必须，
						<br>必须在入口文件里使用<code>->setDatabseConfig('database')</code>配置好数据库连接信息。
					</b>

				</li>
			</ol>
		</fieldset>
		<script src="js/inc.foot.js"></script>
	</body>
</html>
